import { sysProfile, sysUser } from '@/api/user'
import router, { otherRoutes, constantRoutes, resetRouter } from '@/router'
export default {
  namespaced: true,
  state: {
    token: '',
    userInfo: {}
  },
  mutations: {
    setToken(state, value) {
      state.token = value
    },
    // 修改用户信息
    setUserInfo(state, value) {
      state.userInfo = value
    },
    // 清除token与用户信息
    logout(state) {
      state.token = ''
      state.userInfo = ''
      // 重置路由routes
      resetRouter()
    }
  },
  actions: {
    // 获取用户信息
    async getUserInfo({ commit }) {
      // ctx:{state,commit}
      const res = await sysProfile() // res.data
      const res2 = await sysUser(res.data.userId) // res2.data
      //  合并对象：{...a,...b}  Object.assign(目标对象,需要合并的对象,....)
      const res3 = Object.assign({}, res.data, res2.data)
      commit('setUserInfo', res3)
      // 权限数据和动态路由匹配拿到匹配后的路由数据
      // 权限数据：res3.roles.menus  ['settings']
      // 动态路由: otherRoutes  [{meta:{name:'settings'}},{meta:{name:'settings2'}},{meta:{name:'settings3'}},...]
      const newArray = otherRoutes.filter((item) => {
        if (res3.roles.menus.includes(item.meta.name)) {
          return true
        }
      })
      newArray.push({ path: '*', redirect: '/404', hidden: true })
      // 添加路由配制方法  vue2 router.addRoutes(需要添加的路由的数组)  vue3 router.addRoute(需要添加的路由)
      router.addRoutes(newArray)
      // addRoutes添加的路由不能立马使用，它需要再经过一次导航守卫
      // 更新this.$router.options.routes
      router.options.routes = [...constantRoutes, ...newArray]
      // console.log('newArray', newArray)
    }
  }
}
